home *** CD-ROM | disk | FTP | other *** search
/ Aminet 24 / Aminet 24 (1998)(GTI - Schatztruhe)[!][Apr 1998].iso / Aminet / comm / mail / Mutt089src.lha / Mutt-0.89i-AMIGA / src / date.c < prev    next >
C/C++ Source or Header  |  1998-01-28  |  2KB  |  58 lines

  1. /*
  2.  * Copyright (C) 1996-8 Michael R. Elkins <me@cs.hmc.edu>
  3.  * 
  4.  *     This program is free software; you can redistribute it and/or modify
  5.  *     it under the terms of the GNU General Public License as published by
  6.  *     the Free Software Foundation; either version 2 of the License, or
  7.  *     (at your option) any later version.
  8.  * 
  9.  *     This program is distributed in the hope that it will be useful,
  10.  *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *     GNU General Public License for more details.
  13.  * 
  14.  *     You should have received a copy of the GNU General Public License
  15.  *     along with this program; if not, write to the Free Software
  16.  *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  */ 
  18.  
  19. #include "mutt.h"
  20.  
  21. static char DaysPerMonth[12] = {
  22.   31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  23. };
  24.  
  25. #define isLeapYear(x) ((x)%4 == 0 && (((x)%100 != 0) || ((x)%400 == 0)))
  26.  
  27. #define SECSPERDAY 86400
  28. #define SECSPERYEAR 31536000
  29.  
  30. /* converts struct tm to time_t, but does not take the local timezone into
  31.  * account
  32.  */
  33. time_t mutt_mktime (struct tm *t)
  34. {
  35.   int i;
  36.   time_t g = 0;
  37.  
  38.   for (i=70; i < t->tm_year; i++)
  39.   {
  40.     g += SECSPERYEAR;
  41.     if (isLeapYear (1900 + i))
  42.       g += SECSPERDAY;
  43.   }
  44.  
  45.   for (i=0; i < t->tm_mon; i++)
  46.     g += DaysPerMonth [i] * SECSPERDAY;
  47.  
  48.   if (t->tm_mon > 1 && isLeapYear (1900 + t->tm_year))
  49.     g += SECSPERDAY;
  50.  
  51.   g += (t->tm_mday - 1) * SECSPERDAY;
  52.   g += t->tm_hour * 3600;
  53.   g += t->tm_min * 60;
  54.   g += t->tm_sec;
  55.  
  56.   return (g);
  57. }
  58.